package gui;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import linguo.Game;
import linguo.GameState;
import linguo.player.Robot;

public class GameGUI {

	protected Game game;
	protected VentanaPrincipal interfaz;
	protected int robotType;

	public GameGUI(VentanaPrincipal i) {
		interfaz = i;
		game = new Game(this);
	}

	
	/**
	 * Setea el juego
	 * @param g Juego
	 */
	public void setGame(Game g) {
		game = g;
	}

	/** Devuelve el ancho del juego */
	public int gameWidth() {
		return game.getWIDTH();
	}

	/** Devuelve el alto del juego */
	public int gameHeight() {
		return game.getHEIGHT();
	}

	/** Agrega los limites del juego */
	public void agregarLimites(int x, int y) {
		game.setBounds(x, y, game.getWIDTH(), game.getHEIGHT());
	}

	/** Agrega el juego al panel pasado por parametro */
	public void agregarJuegoAlPanel(JPanel panel) {
		panel.add(game);
	}

	/**
	 * Reinicia el juego
	 */
	public void reiniciarJuego() {
		game.reiniciarJuego();
	}

	/**
	 * Empieza el juego y le asigna un archivo, si se cargo alguno
	 * @param r tipo de robot
	 */
	public void empezarJuego(int r) {
		robotType = r;
		game.setNivel(interfaz.getArchivo());
		game.start();
	}

	/**
	 * Finaliza el juego y vuelve al menu de opciones
	 */
	public void terminarJuego() {
		game.stop();
		interfaz.mostrarMenuPrincipal();
	}

	/** 
	 * Muestra un mensaje en pantalla cuando se gana el juego
	 * @param score puntuacion del jugador
	 */
	public void ganarJuego(int score) {
		int seleccion = JOptionPane.showOptionDialog(null, "Ganaste! \n Puntaje: " + score + "\nReiniciar?", "Game Over", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE, null, new Object[] { "Si", "No" }, "Si");

		if (seleccion == 0) reiniciarJuego();
		else terminarJuego();
	}

	/** 
	 * Muestra un mensaje en pantalla cuando se pierde el juego
	 * @param score puntuacion del jugador
	 */
	public void perderJuego(int score) {
		int seleccion = JOptionPane.showOptionDialog(null, "Perdiste. \n Puntaje: " + score + "\nReiniciar Nivel?", "Game Over",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[] { "Si", "No" }, "Si");

		if (seleccion == 0) reiniciarJuego();
		else terminarJuego();
	}

	/**
	 * Devuelve el tipo de robot
	 * @return tipo de robot
	 */
	public int getRobotType() {
		return robotType;
	}

	/**
	 * Devuelve el robot
	 * @return robot
	 */
	public Robot getRobot() {
		return game.getRobot();
	}

	/**
	 * Activa la grilla
	 */
	public void toogleGrid() {
		game.toogleGrid();
	}

	/**
	 * Activa los fps
	 */
	public void toogleFPS() {
		game.toogleFPS();
	}

	/**
	 * Devuelve el estado del juego
	 * @return Estado del juego
	 */
	public GameState getState() {
		return game.getState();
	}

	/**
	 * Muestra el teclado por pantalla
	 */
	public void mostrarTeclado() {
		interfaz.mostrarTeclado();
	}

	/**
	 * Devuelve el nivel que se selecciono en la pantalla principal
	 * @return String con el nombre del nivel
	 */
	public String getNivel() {
		return interfaz.getNivel();
	}

}
